package com.atguigu.gulimall.ware.config;


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;



@Configuration
public class MyMQConfig {
//
//    @RabbitListener(queues = "stock.release.stock.queue")
//    public void listener(Message message, Channel channel) throws IOException {
//        System.out.println("收到订单信息了：");
//        channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
//    }

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }


    @Bean
    public Queue stockDelayQueue(){
        Map<String,Object> arguments= new HashMap<>();

        arguments.put("x-dead-letter-exchange","stock-event-exchange");
        arguments.put("x-dead-letter-routing-key","stock.release");
        arguments.put("x-message-ttl",18000000);

        Queue queue = new Queue("stock.delay.queue", true, false, false, arguments);
        return queue;

    }

    @Bean
    public Queue stockReleaseOrderQueue(){

        Queue queue = new Queue("stock.release.stock.queue", true, false, false, null);
        return queue;
    }

    @Bean
   public Exchange stockEventExchange(){

        TopicExchange topicExchange = new TopicExchange("stock-event-exchange", true, false);
        return topicExchange;

    }

    @Bean
    public Binding stockCreateOrderBinding(){

        Binding binding = new Binding("stock.delay.queue", Binding.DestinationType.QUEUE, "stock-event-exchange", "stock.locked", null);
        return binding;

    }

    @Bean
    Binding StockReleaseOrderBinding(){

        return new Binding("stock.release.stock.queue",Binding.DestinationType.QUEUE, "stock-event-exchange", "stock.release.#", null);
    }


}
